﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.band
    一般带型方程组
    参数 b: b[n][il]存放带型矩阵带区内的元素，返回时将被破坏。
    参数 d: d[n][m]存放方程组右端m组常数向量。返回方程组的m组解向量。
    参数 n: 方程组阶数。
    参数 l: 系数矩阵的半带宽。
    参数 il: 系数矩阵的带宽。应满足 il = 2l + 1。
    参数 m: 方程组右端常数向量的组数。
    返回值 若<0则表示带宽与半带宽值不对；若=0则表示失败；若>0则表示正常。
    */

    public static string drive_band()
    {
        int i, j;
        double[,] b = new double[8, 5]{
            {3.0,-4.0,1.0,0.0,0.0},
            {-2.0,-5.0,6.0,1.0,0.0},
            {1.0,3.0,-1.0,2.0,-3.0},
            {2.0,5.0,-5.0,6.0,-1.0},
            {-3.0,1.0,-1.0,2.0,-5.0},
            {6.0,1.0,-3.0,2.0,-9.0},
            {-4.0,1.0,-1.0,2.0,0.0},
            {5.0,1.0,-7.0,0.0,0.0}
        };
        double[,] d = new double[8, 3]{
            {13.0,29.0,-13.0},
            {-6.0,17.0,-21.0},
            {-31.0,-6.0,4.0},
            {64.0,3.0,16.0},
            {-20.0,1.0,-5.0},
            {-22.0,-41.0,56.0},
            {-29.0,10.0,-21.0},
            {7.0,-24.0,20.0}
        };

        string rs = "";
        rs += gl.html_table("Mat B:", b);
        rs += gl.html_table("Mat D:", d);

        i = gl.band(b, d, 8, 2, 5, 3);
        if (i <= 0) return "error: 0";

        rs += gl.html_table("Mat D:", d);

        return rs;
    }
}